運算子有哪些呢?
把右邊的東西『指定』到左邊,並非一般數學上的『等於』
int num;
num = 10; // 指定10 給num這個變數。
num 是變數,可以把變數當成一個可以盛裝資料的容器
賦值運算就是把被賦的值裝入變數的過程,賦值運算子是從右至左執行運算的,程式先運算得到右邊的值,再將該值裝入左邊的變數,所以=的左邊只能是變數
Java 也支援多重變數賦值
int a;
int b;
int c;
a = b = c = 5;
** 注意:**
除法運算子
如果運算元有有一個是浮點數就可以除以0 或 0.0得到的結果會是正無窮大或負無窮大
public class DivDemo {
public static void main(String[] args) {
double a = 5.2;
double b = 3.1;
double div = a/b;
System.out.println("div:" + div);//1.6774193548387097
//輸出正無窮大
System.out.println("5除以0.0的結果是:" + 5 / 0.0);//Infinity
//輸出負無窮大
System.out.println("-5除以0.0的結果是:" + -5 / 0.0);//-Infinity
//Exception in thread "main" java.lang.ArithmeticException: / by zero
System.out.println("5除以0的結果是:" + -5 / 0);
}
}
取餘數運算子
運算結果不一定是整數
因為取餘數的運算也需要進行除法運算,因此如果取餘數運算的兩個運算元都是整數型,第二個運算元不能是0或0.0
如果只要其一是浮點數,則第二個運算元可以是0或0.0但結果是NaN
public class ModDemo {
public static void main(String[] args) {
double a = 5.2;
double b = 3.1;
double mod = a % b;
System.out.println("mod:" + mod);//mod:2.1
System.out.println("5對0.0取餘數的結果是:" + 5 % 0.0);//NaN
System.out.println("-5對0.0取餘數的結果是:" + -5 % 0.0);//NaN
System.out.println("0對5.0取餘數的結果是:" + 0 % 5.0);//0.0
System.out.println("0對0.0取餘數的結果是:" + -5 % 0.0);//NaN
//Exception in thread "main" java.lang.ArithmeticException: / by zero
System.out.println("-5對0取餘數的結果是:" + -5 % 0);
}
}
我們知道 a++ 其實就是 a=a+1 ,其實 a++ 也可以寫成 ++a,但意義上完全不一樣。
a++ ,存取完a的值後,做++的動作。
++a ,先做++的動作,在讓別人存取
int a = 4;
//先讓a執行算數運算,然後自加
int b = a++ + 6;
//此時印出 a是4 b是10
System.out.println(a + "\n" + b );
int a = 4;
//先讓a自加,再執行算數運算
int b = ++a + 6;
//此時印出 a是5 b是11
System.out.println(a + "\n" + b );
注意:
遞增/遞減運算子只能用於操作變數,不能用於運算元值字面常數、常數或運算式
錯誤如:5++ 、 6 - -
Java 並沒有提供更複雜的運算子,如果需要完成乘方、開方等運算,則可以借助java.lang.Math類別的方法完成數學運算
public class MathDemo {
public static void main (String[] args) {
double a = 3.2;
//求a的5次方,將結果賦給b
double b = Math.pow(a , 5);
System.out.println("b:" + b);
//求a的平方根,將結果賦給c
double c = Math.sqrt(a);
System.out.println("c:" + c);
//運算隨機數,返回一個0~1之間的為隨機數
double d = Math.random();
System.out.println("d:" + d);
//求1.57的sin值
double e = Math.sin(1.57);
System.out.println("e:" + e);
}
}
更多方法可以到官方文件查詢
https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#method.summary
不能用==進行比較的情況
1.基本類型的變數、值 與 參考類型的變數
2.boolean 類型的變數、值與其他類型的變數、值
3.兩個參考類型之間沒有父子繼承關係的變數
public class LogicDemo {
public static void main(String[] args) {
//直接對false 求非運算
System.out.println("!false:" + !false);//true
System.out.println("5 > 3 && '6' > 10 = " + (5 > 3 && '6' > 10));//true
System.out.println("4 >= 5 || 'c' > 'a' = " + (4 >= 5 || 'c' > 'a'));//true
System.out.println("4 >= 5 ^ 'c' > 'a' = " + (4 >= 5 ^ 'c' > 'a'));//true
}
}
只要邏輯判斷式可以100%確定回傳結果,後面的都會被忽略
5 < 4 && 8 > 7
因為5 < 4 是false,無論如何邏輯判斷式已經知道是false了,不會往右判斷
8 > 7 || 5 < 4
因為8 > 7 是true,無論如何邏輯判斷式已經知道是true了,不會往右判斷
→『false接到and』或 『true接到or』,前者立刻回傳false,後者立刻回傳true。
& 和 && 、| 和 || 的差異
& 和 | 都會先運算前後兩個運算元 && 和 || 會先運算左邊的運算元,具有短路特性
格式:
判斷式 ? 若判斷為真執行區塊 : 若判斷為假執行區塊
String str = 5 > 3 ? "5 大於 3" : "5 小於 3 "
System.out.println(str)//5 大於 3
最後還要注意到的是....
優先值:1代表最高優先值 ,15代表最低優先值